﻿/**
* Панель управления новостями
*/
var container = Ext.getCmp(sectionId);
Ext.onReady(function () {
    var advsGrid = {
        xtype: 'grid',
        frame: true,
        store: new Ext.data.JsonStore({
            root: 'data',
            idProperty: 'id',
            storeId: 'advsStore',
            fields: [
                'id',
                'tags',
                'title',
                'content',
                'phone',
                'email',
                'city',
                'user',
                'category',
                'views',
                'status',
                'sticked',
                'new',
                'hot',
                'expirationDate',
                'dateCreated',
                'dateModified'
            ]
        }),
        height: 400,
        autoExpandColumn: 'advsTitleColumn',
        id: 'advsGrid',
        selModel: new Ext.grid.RowSelectionModel({

        }),
        colModel: new Ext.grid.ColumnModel({
            columns: [
                {
                    header: 'ИД',
                    dataIndex: 'id',
                    sortable: true,
                    width: 50,
                    align: 'left',
                    id: 'advsIdColumn'
                },
                {
                    header: 'Заголовок',
                    dataIndex: 'title',
                    sortable: true,
                    width: 120,
                    align: 'left',
                    id: 'advsTitleColumn'
                },
                {
                    header: 'Просмотров',
                    dataIndex: 'views',
                    sortable: true,
                    width: 80,
                    align: 'left',
                    id: 'advsViewsColumn'
                },
                {
                    header: 'Дата создания',
                    dataIndex: 'dateCreated',
                    sortable: true,
                    width: 120,
                    align: 'left',
                    id: 'newsDateCreatedColumn'
                },
                {
                    header: 'Дата модификации',
                    dataIndex: 'dateModified',
                    sortable: true,
                    width: 120,
                    align: 'left',
                    id: 'newsDateModifiedColumn'
                }

            ]
        }),
        tbar: [
            {
                text: 'Все объявления',
                handler: function() {
                    reloadAdvs("all");
                }
            },
            {
                text: 'На проверке',
                handler: function() {
                    reloadAdvs("moderated");
                }
            },
            {
                text: 'Заблокированные',
                handler: function() {
                    reloadAdvs("blocked");
                }
            },
            {
                text: 'Архивы',
                handler: function() {
                    reloadAdvs("archived");
                }
            },
            '-',
            {
                text: 'Добавить',
                tooltip: 'Отображает диалог добавления объявления',
                handler: function(){
                    showAdvDialog(undefined);
                }
            },
            {
                text: 'Редактировать',
                tooltip: 'Отображает диалог редактирования выбранного объявления',
                handler: function(){
                    var selected = Ext.getCmp('advsGrid').getSelectionModel().getSelected();
                    if (selected != null){
                        showAdvDialog(selected);
                    }
                }
            },
            {
                text: 'Удалить',
                tooltip: 'Удаляет выбранное объявление',
                handler: function(){
                    var selectedRecord = Ext.getCmp('advsGrid').getSelectionModel().getSelected();
                    if (selectedRecord == null){
                        return;
                    }
                    Ext.Msg.show({
                        title: 'Удаление объявления',
                        msg: 'Вы действительно хотите удалить выбранное объявление?',
                        buttons: Ext.Msg.YESNO,
                        icon: Ext.Msg.QUESTION,
                        fn: function(txt){
                            if (txt == "yes"){
                                var id = selectedRecord.data.id;
                                global.Ajax({
                                    url: '/ControlPanel/ManageAdvs/Delete',
                                    params: {
                                        id: id
                                    },
                                    maskEl: Ext.getCmp('advsGrid'),
                                    maskMsg: 'Идет удаление объявления',
                                    success: function(data){
                                        Ext.getCmp('advsGrid').getStore().remove(selectedRecord);
                                    }
                                });
                            }
                        }
                    });
                }
            }
        ],
        listeners: {
            rowdblclick: function(number,e){
                var selected = Ext.getCmp('advsGrid').getSelectionModel().getSelected();
                if (selected != null){
                    showAdvDialog(selected);
                }
            }
        }
    };

container.add(advsGrid);
container.doLayout();

    /**
     * Перезагружает грид объявлений с указанным фильтром
     * @param filter - тип фильтра
     */
    function reloadAdvs(filter){
        global.Ajax({
            url: '/ControlPanel/ManageAdvs/GetAdvs',
            params: {
                filter: filter
            },
            maskEl: Ext.getCmp('advsGrid'),
            maskMsg: 'Идет загрузка списка объявлений',
            success: function(data){
                Ext.getCmp('advsGrid').getStore().loadData(data);
            }
        });
    }
    reloadAdvs('all');

    /**
      * Функция отобрадающая диалог создания или редактирования объявления
      * @param adv - объявление
     */
    function showAdvDialog(adv){
        var wnd = new Ext.Window({
            title: adv == undefined ? "Создание объявления" : "Редактирование объявления номер "+adv.data.id,
            resizable: true,
            width: 350,
            height: 600,
            layout: 'fit',
            items: [
                {
                    xtype: 'tabpanel',
                    defferedRender: false,
                    activeTab: 0,
                    items: [
                        {
                            title: 'Свойства',
                            items: [
                                {
                                    xtype: 'form',
                                    id: 'advForm',
                                    labelAlign: 'top',
                                    bodyStyle: 'padding: 5px',
                                    items: [
                                        {
                                            xtype: 'hidden',
                                            id: 'advIdField',
                                            value: adv != undefined ? adv.data.id : -1
                                        },
                                        {
                                            xtype: 'textfield',
                                            allowBlank: true,
                                            id: 'advTitleField',
                                            anchor: '100%',
                                            fieldLabel: 'Заголовок',
                                            value: adv != undefined ? adv.data.title : ""
                                        },
                                        {
                                            xtype: 'textarea',
                                            allowBlank: false,
                                            id: 'advContentField',
                                            anchor: '100%',
                                            height: 100,
                                            fieldLabel: 'Содержимое (макс 4000 символов)',
                                            value: adv != undefined ? adv.data.content : ""
                                        },
                                        {
                                            xtype: 'textfield',
                                            allowBlank: true,
                                            id: 'advTagsField',
                                            anchor: '100%',
                                            fieldLabel: 'Теги',
                                            value: adv != undefined ? adv.data.tags : ""
                                        },
                                        {
                                            xtype: 'combo',
                                            fieldLabel: 'Категория',
                                            id: 'advCategoryField',
                                            mode: 'local',
                                            triggerAction: 'all',
                                            lazyRender: true,
                                            readonly: true,
                                            anchor: '100%',
                                            allowBlank: false,
                                            typeAhead: true,
                                            store: new Ext.data.JsonStore({
                                                idProperty: 'id',
                                                root: 'data',
                                                fields: ['id','name']
                                            }),
                                            displayField: 'name',
                                            valueField: 'id',
                                            hiddenName: 'status',
                                            value: adv != undefined ? adv.data.category : -1
                                        },
                                        {
                                            xtype: 'combo',
                                            fieldLabel: 'Статус',
                                            id: 'advStatusField',
                                            mode: 'local',
                                            triggerAction: 'all',
                                            lazyRender: true,
                                            readonly: true,
                                            anchor: '100%',
                                            typeAhead: true,
                                            store: new Ext.data.ArrayStore({
                                                fields: ['id','name'],
                                                data: [
                                                    [0,"В работе"],
                                                    [1,"На проверке"],
                                                    [2,"Заблокировано"],
                                                    [3,"В архиве"]
                                                ]
                                            }),
                                            displayField: 'name',
                                            valueField: 'id',
                                            hiddenName: 'status',
                                            value: adv != undefined ? adv.data.status : 0
                                        },
                                        {
                                            xtype: 'compositefield',
                                            hideLabel: true,
                                            anchor: '100%',
                                            items: [
                                                {
                                                    xtype: 'checkbox',
                                                    id: 'advStickedField',
                                                    hideLabel: true,
                                                    boxLabel: 'Прилеплено',
                                                    checked: adv != undefined ? adv.data.sticked : false,
                                                    flex: 1
                                                },
                                                {
                                                    xtype: 'checkbox',
                                                    id: 'advNewField',
                                                    hideLabel: true,
                                                    boxLabel: 'Новое',
                                                    checked: adv != undefined ? adv.get("new") : true,
                                                    flex: 1
                                                },
                                                {
                                                    xtype: 'checkbox',
                                                    id: 'advHotField',
                                                    hideLabel: true,
                                                    boxLabel: 'Горячее',
                                                    checked: adv != undefined ? adv.get("hot") : false,
                                                    flex: 1
                                                }
                                            ]
                                        },
                                        {
                                            xtype: 'compositefield',
                                            anchor: '100%',
                                            items: [
                                                {
                                                    xtype: 'textfield',
                                                    allowBlank: false,
                                                    id: 'advCityField',
                                                    readonly: true,
                                                    flex: 1,
                                                    fieldLabel: 'Город',
                                                    value: adv != undefined ? adv.data.city : "Хабаровск"
                                                },
                                                {
                                                    xtype: 'textfield',
                                                    allowBlank: true,
                                                    id: 'advPhoneField',
                                                    readonly: false,
                                                    flex: 1,
                                                    fieldLabel: 'Телефон',
                                                    value: adv != undefined ? adv.data.phone : ""
                                                },
                                                {
                                                    xtype: 'textfield',
                                                    allowBlank: true,
                                                    id: 'advEmailField',
                                                    flex: 1,
                                                    readonly: false,
                                                    fieldLabel: 'Email',
                                                    value: adv != undefined ? adv.data.email : ""
                                                }
                                            ]
                                        },
                                        {
                                            xtype: 'datefield',
                                            fieldLabel: 'Дата истечения',
                                            format: 'd.m.Y',
                                            id: 'advExpirationDateField',
                                            allowBlank: true,
                                            anchor: '100%',
                                            value: adv != undefined ? adv.data.expirationDate : null
                                        },
                                        {
                                            xtype: 'displayfield',
                                            anchor: '100%',
                                            fieldLabel: 'Разместил',
                                            value: adv != undefined ? adv.data.user : "Администратор"
                                        }
                                    ]
                                }
                            ]
                        },
                        {
                            title: 'Фотографии',
                            layout: 'fit',
                            items: []
                        }
                    ]
                }
            ],
            buttons: [
                {
                    text: 'Сохранить',
                    handler: function(){
                        // Валидируем
                        if (!Ext.getCmp('advForm').getForm().isValid()){
                            Ext.Msg.alert('Ошибка','Пожалуйста, правильно заполните все поля формы');
                            return;
                        }

                        // подготавливаем данные к отправке
                        var params = {
                            id: Ext.getCmp('advIdField').getValue(),
                            title: Ext.getCmp('advTitleField').getValue(),
                            content: Ext.getCmp('advContentField').getValue(),
                            tags: Ext.getCmp('advTagsField').getValue(),
                            category: Ext.getCmp('advCategoryField').getValue(),
                            status: Ext.getCmp('advStatusField').getValue(),
                            sticked: Ext.getCmp('advStickedField').getValue(),
                            hot: Ext.getCmp('advHotField').getValue(),
                            city: Ext.getCmp('advCityField').getValue(),
                            phone: Ext.getCmp('advPhoneField').getValue(),
                            email: Ext.getCmp('advEmailField').getValue(),
                            expirationDate: Ext.getCmp('advExpirationDateField').getValue(),
                            views: 0,
                            dateCreated: new Date()
                        };
                        params["new"] = Ext.getCmp('advNewField').getValue();

                        // Отправляем
                        global.Ajax({
                            url: '/ControlPanel/ManageAdvs/Save',
                            params: params,
                            maskEl: Ext.getCmp('advsGrid'),
                            maskMsg: 'Идет сохранение',
                            success: function(data){
                                wnd.close();
                                // В зависимости от того что у нас было: создание или редактирование - вносим изменения в клиентскую модель
                                if (params.id < 0){
                                    // создаем запись в гриде
                                    params.id = data.data.id;
                                    var record = new Ext.data.Record(params);
                                    Ext.getCmp('advsGrid').getStore().add(record);
                                }
                                else
                                {
                                    adv.set("title",params.title);
                                    adv.set("content",params.content);
                                    adv.set("tags",params.tags);
                                    adv.set("phone",params.phone);
                                    adv.set("email",params.email);
                                    adv.set("hot",params.hot);
                                    adv.set("sticked",params.sticked);
                                    adv.set("new",params["new"]);
                                    adv.set("status",params.status);
                                    adv.set("category",params.category);
                                    adv.set("expirationDate",params.expirationDate);
                                    adv.set("city",params.city);
                                    adv.set("dateModified",new Date());
                                    adv.commit();
                                }
                            }
                        });
                    }
                },
                {
                    text: 'Закрыть',
                    handler: function(){
                        wnd.close();
                    }
                }
            ],
            listeners: {
                show: function(){
                    // Загружаем данные для комбобокса категорий
                    var cmp = Ext.getCmp('advCategoryField');
                    global.Ajax({
                        url: '/ControlPanel/ManageAdvs/GetAdvsCategories',
                        success: function(data){
                            cmp.getStore().loadData(data);
                            if (adv != undefined){
                                cmp.setValue(adv.data.category);
                            }
                            else {
                                cmp.setValue("");
                            }
                        }
                    });
                }
            }
        });
        wnd.show();
    }

});